package beanstao.util.store.dal.interfaces;

import beanstao.util.id.Id;
import beanstao.util.store.database.Where;
import beanstao.util.store.domainobject.DomainList;


/**
 * 数据的Remove功能接口。<br>
 * 比较轻松的办法是从 'beanstao.util.store.dal.AbstractDomainDbDal' 继承。
 * 
 * @author beanstao@google.com 
 * @version 3.0
 * @date 2010-08-11 17:26:08
 * 
 * @param <T> DomainObject
 */
public interface IDomainRemove<T>
{
	/**
	 * 彻底移除本实体
	 * 
	 * @return
	 */
	boolean remove(T domain);

	/**
	 * 将实体集合中所有的实体彻底移除,返回成功操作的记录数
	 * 
	 * @param domainList 指定的实体集合
	 * @return 是否彻底删除成功
	 */
	int remove(DomainList<T> domainList);

	/**
	 * 彻底移除指定条件集合的记录,返回成功操作的记录数
	 * 
	 * @param modifiorId 操作者的Id
	 * @param dId 指定的实体的Id
	 * @return 是否彻底删除成功
	 */
	boolean remove(Id modifiorId, Id dId);

	/**
	 * 彻底移除指定条件集合的记录,返回成功操作的记录数
	 * 
	 * @param modifiorId 操作者的Id
	 * @param where 指定的条件
	 * @return 是否彻底删除成功
	 */
	boolean remove(Id modifiorId, Where where);

	/**
	 * 彻底移除指定的条件键值的记录（单一条件删除）,返回成功操作的记录数
	 * 
	 * @param key
	 * @param value
	 * @return 是否彻底删除成功
	 */
	boolean remove(Id modifiorId, String key, Object value);

	/**
	 * <b>请程序员谨慎调用！记录将无法恢复。</b> <br>
	 * 彻底移除本类型所在表(数据库)、节点(XML)的所有记录,返回成功操作的记录数
	 * 
	 * @return 是否彻底删除成功
	 */
	boolean removeAll(Id modifiorId);
}
